跳到主要内容

Selenium 简单使用

Selenium 是什么

Selenium 是一个自动化测试工具 RPA,利用它可以驱动浏览器执行特定的动作,如点击、下拉等操作,同时还可以获取浏览器当前呈现的页面的源代码,做到可见即可爬。

初始化项目

如何使用 Poetry 初始化一个 selenium 项目?

poetry new selenium-project
cd selenium-project

poetry add selenium

查看 Chrome 浏览器的版本

点击关于 Google Chrome 既可以查看版本信息:

去这个网址: https://registry.npmmirror.com/binary.html?path=chromedriver/ 寻找对应大版本的 Chrome Driver

如果没找到版本,可以直接到 官网 去下载

https://github.com/GoogleChromeLabs/chrome-for-testing?tab=readme-ov-file#json-api-endpoints

# 直接从这个 JSON 找到对应版本
https://googlechromelabs.github.io/chrome-for-testing/latest-patch-versions-per-build-with-downloads.json

然后下载 WebDriver 驱动

隐藏 selenium 特征

stealth.min.js 这个文件是 puppeteer 中用于抹去自动化程序特征的。当他被单独提取出来后就可以在 selenium 中加载并使用,使得可以抹掉 selenium 中的自动化特征,从而绕过一些网站或者验证程序的机器人检测。

关于这个文件在 Python 的 selenium 的用法其实很简单,就是在初始化完 webdriver 后使用 execute_cdp_cmd 函数来执行这个 js 文件即可

# 初始化webdriver
driver = webdriver.Chrome()

# 读取文件
with open('stealth.min.js', 'r') as f:
js = f.read()
# 调用函数在页面加载前执行脚本
driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {'source': js})

这个文件的地址位于这个项目 requireCool/stealth.min.js

常用配置参数

from selenium import webdriver
option = webdriver.ChromeOptions()

# 添加UA
options.add_argument('user-agent="MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"')

# 指定浏览器分辨率
options.add_argument('window-size=1920x3000')

# 谷歌文档提到需要加上这个属性来规避bug
chrome_options.add_argument('--disable-gpu')

# 隐藏滚动条, 应对一些特殊页面
options.add_argument('--hide-scrollbars')

# 不加载图片, 提升速度
options.add_argument('blink-settings=imagesEnabled=false')

# 浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
options.add_argument('--headless')

# 以最高权限运行
options.add_argument('--no-sandbox')

# 手动指定使用的浏览器位置
options.binary_location = r"C:Program Files (x86)GoogleChromeApplicationchrome.exe"

#添加crx插件
option.add_extension('d:crxAdBlock_v2.17.crx')

# 禁用JavaScript
option.add_argument("--disable-javascript")

# 设置开发者模式启动,该模式下webdriver属性为正常值
options.add_experimental_option('excludeSwitches', ['enable-automation'])

# 禁用浏览器弹窗
prefs = {
'profile.default_content_setting_values' : {
'notifications' : 2
}
}
options.add_experimental_option('prefs',prefs)

# 添加代理 ip
options.add_argument("--proxy-server=http://XXXXX.com:80")

driver = webdriver.Chrome(chrome_options=chrome_options)

其他配置项目参数

  --user-data-dir=[PATH]
# 指定用户文件夹User Data路径,可以把书签这样的用户数据保存在系统分区以外的分区

  –disk-cache-dir=[PATH]
# 指定缓存Cache路径

  –disk-cache-size=
# 指定Cache大小,单位Byte

  –first run
# 重置到初始状态,第一次运行

  –incognito
# 隐身模式启动

  –disable-javascript
# 禁用Javascript

  --omnibox-popup-count="num"
# 将地址栏弹出的提示菜单数量改为num个

  --user-agent="xxxxxxxx"
# 修改HTTP请求头部的Agent字符串,可以通过about:version页面查看修改效果

  --disable-plugins
# 禁止加载所有插件,可以增加速度。可以通过about:plugins页面查看效果

  --disable-javascript
# 禁用JavaScript,如果觉得速度慢在加上这个

  --disable-java
# 禁用java

  --start-maximized
# 启动就最大化

  --no-sandbox
# 取消沙盒模式

  --single-process
# 单进程运行

  --process-per-tab
# 每个标签使用单独进程

  --process-per-site
# 每个站点使用单独进程

  --in-process-plugins
# 插件不启用单独进程

  --disable-popup-blocking
# 禁用弹出拦截

  --disable-plugins
# 禁用插件

  --disable-images
# 禁用图像

  --incognito
# 启动进入隐身模式

  --enable-udd-profiles
# 启用账户切换菜单

  --proxy-pac-url
# 使用pac代理 [via 1/2]

  --lang=zh-CN
# 设置语言为简体中文

  --disk-cache-dir
# 自定义缓存目录

  --disk-cache-size
# 自定义缓存最大值(单位byte)

  --media-cache-size
# 自定义多媒体缓存最大值(单位byte)

  --bookmark-menu
# 在工具 栏增加一个书签按钮

  --enable-sync
# 启用书签同步